﻿#define _CRT_SECURE_NO_WARNINGS 1
//题目信息
//标题：ruby 和薯条(30 分)
//计分规则：每题以多次提交中最高得分计分
//时间限制：2 秒
//空间限制：32MB
//限定语言：C(clang11)、C++(clang++11)、Pascal(fpc 3.0.2)、Java(javac 1.8)、Python2(2.7.3)、PHP(7.4.7)、C#(mcs 5.4)、ObjC(gcc 5.4)、Python3(3.9)、JavaScript Node(12.18.2)、R(4.0.3)、Go(1.14.4)、Ruby(2.7.1)、Swift(5.3)、matlab(Octave 5.2)、pypy2(pypy2.7.13)、pypy3(pypy3.6.1)、Rust(1.44)、Scala(2.11.12)、Kotlin(1.4.10)、Groovy(3.0.6)、TypeScript(4.1.2)
//输入输出格式：64bit IO Format : % lld
//编码说明：本题可使用本地 IDE 编码，不能使用本地已有代码，无跳出限制，编码后请点击 “保存并提交” 按钮进行代码提交。
//题目描述
//ruby 很喜欢吃薯条。有一天，她拿出了n根薯条。第i根薯条的长度为ai。ruby 认为，若两根薯条的长度之差在l和r之间，则认为这两根薯条有 “最萌身高差”。用数学语言描述，即若 l ≤ | ai − aj | ≤ r，则第i根薯条和第j根薯条有 “最萌身高差”。ruby 想知道，这n根薯条中，存在多少对薯条有 “最萌身高差”？
//注：次序不影响统计，即认为(ai, aj)和(aj, ai)为同一对。
//输入描述
//第一行三个正整数n, l, r，含义见题目描述。（1 ≤ n ≤ 200000，1 ≤ l ≤ r ≤ 1e9）第二行n个正整数ai，分别代表每根薯条的长度。（1 ≤ ai ≤ 1e9）
//输出描述
//一个正整数，代表 “最萌身高差” 的薯条对数。
//示例 1
//输入：
//plaintext
//5 2 3
//3 1 6 2 5
//输出：
//plaintext
//4
//说明：(3, 1) (3, 6) (3, 5) (2, 5) 共 4 对

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

//使用滑动窗口会超时

int main()
{
    long long n, l, r;
    cin >> n >> l >> r;
    vector<long long> arr(n);
    for (int i = 0; i < n; i++)
        cin >> arr[i];

    long long count = 0;
    sort(arr.begin(), arr.end());

    //滑动窗口
    //对于每个right 找对应的left区间
    int right = 1;
    while (right < n)
    {
        //二分查找两个区间
        int left_left = 0;
        int low = 0;
        int high = right - 1;
        while (low < high)
        {
            int mid = (low + high) >> 1;
            if (arr[right] - arr[mid] > r)
            {
                low = mid + 1;
            }
            else {
                high = mid;
            }
        }
        left_left = high;
        //这种二分一定会给一个解 但要验证这个解是否有效
        bool left_left_valid = (arr[right] - arr[left_left] <= r);


        int left_right = 0;
        low = 0;
        high = right - 1;
        while (low < high)
        {
            int mid = (low + high + 1) >> 1;
            if (arr[right] - arr[mid] < l)
            {
                high = mid - 1;
            }
            else {
                low = mid;
            }
        }
        left_right = low;
        bool left_right_valid = (arr[right] - arr[left_right] >= l);
        //此时的left区间
        // 只有两个边界都有效，且区间合法时才计数
        if (left_left_valid && left_right_valid && left_left <= left_right)
        {
            count += (left_right - left_left + 1);
        }
        right++;
    }
    cout << count << endl;
    return 0;
}